<?php

require_once('DataAccess.php');
require_once('NaturezaDespesa.php');

/**
Interface DAO de NaturezaDespesa. Estes m�todos N�O devem ser chamados diretamente.
Ao inv�s disso devem ser chamados por m�todos da classe NaturezaDespesa.
*/

class NaturezaDespesaDAO
{

      private $database;

      public function NaturezaDespesaDAO( )
      {
               $this->database = DataAccess::getConnection();
      }
      
      /**
      Insere um registro na tabela t_natureza_despesa_servico .
      @categoria - Objeto do tipo NaturezaDespesa com as informa��es que ser�o gravadas no banco de dados
      @return - Retorna TRUE caso a operação seja efetuada com sucesso ou FALSE caso contr�rio.
      */
      public function Salvar( $naturezaDespesa )
      {
      		$consulta = $this->database->Fetch("BEGIN");
		
			if ( $consulta )
    		{   
    			$id        = $naturezaDespesa->id;
      			$descricao = $naturezaDespesa->descricao;      			
               	$consulta = $this->database->Fetch("INSERT INTO t_natureza_despesa( id, descricao )
                                 VALUES ('$id' ,'$descricao')");
    			if( $consulta )
           		{
           			$consulta = $this->database->Fetch("COMMIT");
           			return TRUE;
           		}
           		else
           		{
          			$consulta = $this->database->Fetch("ROLLBACK");
           			return FALSE;
           		}
          
    		}
    		else
    		{
    			$consulta = $this->database->Fetch("ROLLBACK");
            	return FALSE;
    		};
      }

      /**
      Busca por todos os registros inseridos na tabela t_natureza_despesa_servico que possuam o campo tipo igual a $tipo.
      Para cada registro encontrado ser� criada uma inst�ncia de NaturezaDespesa com os valores das colunas do registro em quest�o.
      Por fim, caso sejam encontrados registros, todas as inst�ncias criadas ser�o inseridas dentro de um array que ser� retornado por este m�todo.
      Caso contr�rio, ser� retornado FALSE indicando que n�o foi encontrado nenhum registro.
      @return - Retorna um array de objetos do tipo NaturezaDespesa. Caso n�o encontre nenhum resultado retorna FALSE.
      */
      public function ListarNaturezaDespesas()
      {
               $consulta = $this->database->Fetch("SELECT * FROM t_natureza_despesa");

               if ( $consulta != FALSE )
               {

                  $rows = $this->database->getRow();
                  $objetos = array();
                  for( $i = 0; $i < count($rows); $i++ )
                  {
                       $naturezaDespesa = new NaturezaDespesa();
                       $naturezaDespesa->id = $rows[$i]['id'];
                       $naturezaDespesa->descricao = $rows[$i]['descricao'];
                       $objetos[] = $naturezaDespesa;
                  }

                  return $objetos;
               }
               else if( mysql_num_rows( $consulta ) == 0 )
               {
                  return FALSE;
               }
      }
      
      public function CarregarNaturezaDespesa( $id )
      {
               $consulta = $this->database->Fetch("SELECT * FROM t_natureza_despesa WHERE id = '$id' ");

               if ( $consulta != FALSE )
               {
                  $rows = $this->database->getRow();

                  $naturezaDespesa = new NaturezaDespesa();
                  $naturezaDespesa->id = $rows[0]['id'];
                  $naturezaDespesa->descricao = $rows[0]['descricao'];

                  return $naturezaDespesa;
               }
               else if( mysql_num_rows( $consulta ) == 0 )
               {
                  return FALSE;
               }
      }

      /**
      Altera um registro na tabela t_natureza_despesa_servico.
      @categoria - Objeto do tipo NaturezaDespesa com as informa��es que ser�o alteradas no banco de dados
      @return - Retorna TRUE caso a opera��o seja efetuada com sucesso ou FALSE caso contr�rio.
      */
      public function Alterar( $naturezaDespesa )
      {
      		$consulta = $this->database->Fetch("BEGIN");
		
			if ( $consulta )
    		{       
      			$descricao = $naturezaDespesa->descricao;
               	$id = $naturezaDespesa->id; // chave-prim�ria do registro que ser� alterado

               	$consulta = $this->database->fetch("UPDATE t_natureza_despesa SET descricao='$descricao' WHERE id = '$id' ");

               	if( $consulta )
           		{
           			$consulta = $this->database->Fetch("COMMIT");
           			return TRUE;
           		}
           		else
           		{
          			$consulta = $this->database->Fetch("ROLLBACK");
           			return FALSE;
           		}
          
    		}
    		else
    		{
    			$consulta = $this->database->Fetch("ROLLBACK");
            	return FALSE;
    		};
      }
      
       /**
      Exclui um registro da tabela t_natureza_despesa_servico de chave-prim�ria $id.
      @id - Chave-prim�ria da categoria cadastrada no banco de dados
      @return - Retorna TRUE caso a opera��o seja efetuada com sucesso ou FALSE caso contr�rio.
      */
      public function Deletar( $id )
      {
      		$consulta = $this->database->Fetch("BEGIN");
		
			if ( $consulta )
    		{       
      			$consulta = $this->database->Fetch("DELETE FROM t_natureza_despesa WHERE id='$id'");
            	
      			if( $consulta )
           		{
           			$consulta = $this->database->Fetch("COMMIT");
           			return TRUE;
           		}
           		else
           		{
          			$consulta = $this->database->Fetch("ROLLBACK");
           			return FALSE;
           		}
          
    		}
    		else
    		{
    			$consulta = $this->database->Fetch("ROLLBACK");
            	return FALSE;
    		};
      }
}
?>